package com.tp2.bo.impl;

import com.tp2.bo.Oferta;
import com.tp2.dominio.Descuento;
import com.tp2.dominio.MedioDePago;
import com.tp2.dominio.Producto;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class OfertaMarcaCategoria extends Oferta {

    private Map<Producto, Double> productosAdheridos;
    private List<Producto> productosExcluidos;

    public OfertaMarcaCategoria(){
    	super();
    	this.setPrioridad(2);
    }
    
    @Override
    public List<Descuento> aplicar(List<ProductoCompra> productos, MedioDePago medioDePagoCompra) {
        List<Descuento> descuentosAplicados = new ArrayList<Descuento>();
        for (Map.Entry<Producto, Double> productoAdherido : getProductosAdheridos().entrySet()) {
            for (Producto producto : productos) {
                if (productoAdherido.getValue() != null && productoAdherido.getKey().equals(producto) && !esExcluido(producto)
                        && esMedioDePagoValido(medioDePagoCompra)) {
                    Double descuento = ((producto.getPrecio()) * (productoAdherido.getValue())) / 100;
                    
                    descuentosAplicados.add(new Descuento(getDescripcion(), descuento));
                }
            }
        }

        return descuentosAplicados;
    }

    public Map<Producto, Double> getProductosAdheridos() {
        return productosAdheridos;
    }

    public void setProductosAdheridos(Map<Producto, Double> productosAdheridos) {
        this.productosAdheridos = productosAdheridos;
    }

    public List<Producto> getProductosExcluidos() {
        return productosExcluidos;
    }

    public void setProductosExcluidos(List<Producto> productosExcluidos) {
        this.productosExcluidos = productosExcluidos;
    }

    public boolean esExcluido(Producto producto) {

        if (getProductosExcluidos().size() > 0) {
            for (Producto productoExcluido : getProductosExcluidos()) {
                if (producto.equals(productoExcluido)) {
                    return true;
                }
            }
        }
        return false;
    }
       
    public String getDescripcion(){
    	
    	if (descripcion == null){
        
    		return "Descuento por Marca/Categoria";
    	}
    	
    	return descripcion;
    		
    }

}
